草庐IT

快速替代 respondsToSelector :

全部标签

c - x86-64下的快速堆栈切换

在x86-64下切换堆栈的最少代码是多少?我正在尝试在没有getcontext或setjmp+内联汇编的情况下在Windows和Linux下实现纤程。它真的像交换$rsp和$rbp一样简单吗?因为我可以轻松做到。我只是不知道该怎么做。我对我的x86-64知识生疏了。 最佳答案 将RSP更改为指向不同的堆栈必须作为上下文切换的一部分来完成,上下文切换会保存旧线程/纤程中的所有寄存器并从新寄存器加载已保存的架构状态。不仅是RBP,还有所有RAX-RDI和R8-R15,以及RIP(通过jmp或ret)。我认为还有所有其他调用保留的架构状态

c++ - 捕获屏幕的替代方法? (C++, Windows 操作系统)

keybd_event(VK_SNAPSHOT,0x45,KEYEVENTF_EXTENDEDKEY,0);keybd_event(VK_SNAPSHOT,0x45,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);HBITMAPh;OpenClipboard(NULL);h=(HBITMAP)GetClipboardData(CF_BITMAP);CloseClipboard();...通常这很好用。但如果前景窗口发生变化并锁定剪贴板,则它无法打开剪贴板。是否有任何替代方法来捕获屏幕-也可以在后台工作-?谢谢, 最佳答案

windows - 如何从一个进程快速切换到另一个进程?

我需要在沙盒进程上运行不安全的native代码,我需要减少进程切换的瓶颈。两个进程(Controller和沙箱)共享两个自动重置events以及用于通信的映射文件(共享内存)的连贯View。为了使这篇文章更小,我从示例代码中删除了初始化,但事件是由Controller创建的,使用DuplicateHandle复制,然后在工作之前发送到沙箱进程。Controller来源:voidinSandbox(HANDLEhNewRequest,HANDLEhAnswer,volatileint*shared){intbefore=*shared;for(inti=0;i沙盒来源:voidsandb

c# - 快速整数 ABS 函数

intX=a-b;intd=Math.Abs(X);我很确定.NET不会进行内联。那么,我会使用if(),还是有其他一些鲜为人知的技巧? 最佳答案 我做了一些性能测试,以了解使用标准Math.Abs​​之外的东西是否真的可以节省时间。执行所有这些2000000000次后的结果(i从-1000000000到+1000000000,因此没有溢出):Math.Abs(i)5839msFactor1i>0?i:-i6395msFactor1.09(i+(i>>31))^(i>>31)5053msFactor0.86(这些数字因不同的运行而略

c# - 用于 .NET 的快速且内存高效的 ASCII 字符串类

这可能以前有人问过,但我找不到任何这样的帖子。是否有处理ASCII字符串的类?好处很多:比较应该更快,因为它只是逐字节比较(而不是使用可变编码的UTF-8)内存效率高,在大字符串中应该使用大约一半的内存ToUpper()/ToLower()的更快版本,使用语言不变的查找表JonSkeet写了一个基本的AsciiStringimplementation并证明了#2,但我想知道是否有人更进一步并完成了这样的类(class)。我确信会有用处,尽管通常没有人会采用这样的方法,因为所有现有的String函数都必须手动重新实现。StringAsciiString之间的转换会分散在各处,从而使原本简

c# - 分布式 key 生成是否有 GUID 替代方案?

我的情况是:我有许多客户端应用程序,它们使用本地数据库(MSSQL、MSAccess-抱歉,这是企业系统,我必须支持旧版...)我对客户的趋势一无所知-现在大约是10,但可能一年约100个。这些表中的数据到达我的中央服务器并放入一个公用表中有时现有(客户端)数据会更改-我必须执行更新/删除操作我不想使用GUID(.NET类型System.Guid)-很难简单地在MSAccess上实现和支持。此外,它是notgoodforperformance我需要对该公用表进行快速搜索,因此最好使用int或longint作为PK所以,我想要:避免碰撞的独特之处(它将用作PK)它应该是int或longi

c# - 等待 .NET 4.0 中的替代方案?

.NET4.0中await关键字的最佳替代方案是什么?我有一个方法需要在异步操作后返回一个值。我注意到wait()方法完全阻塞了线程,从而使异步操作变得无用。在释放UI线程的同时运行异步操作的选项有哪些? 最佳答案 我认为你的基本选择是使用Task和.ContinueWith()使用异步CTP和async/await使用ReactiveExtensions最简单的方法可能是安装AsyncCTP。据我所知,许可证允许商业用途。它为编译器打补丁并附带一个150kb的dll,您可以将其包含到您的项目中。您可以使用Task和.Continu

c# - 比 decimal.Parse 更快的替代方法

我注意到decimal.Parse(number,NumberStyles.AllowDecimalPoint,CultureInfo.InvariantCulture)比基于JeffreySax来自FasteralternativetoConvert.ToDouble的代码的自定义十进制解析方法慢大约100%publicstaticdecimalParseDecimal(stringinput){boolnegative=false;longn=0;intlen=input.Length;intdecimalPosition=len;if(len!=0){intstart=0;if(

c# - 可移植库上是否有替代 AppDomain.GetAssemblies 的方法?

我正在寻找一种将当前应用程序的程序集放入可移植库项目中的方法。在经典库项目中,下面的代码行完成了这项工作:varassemblies=System.AppDomain.CurrentDomain.GetAssemblies();但似乎System.AppDomain不可用于可移植库。有谁知道在可移植库上获取当前域程序集的方法吗? 最佳答案 您可以使用平台Hook:在您的可移植图书馆中:usingSystem.Collections.Generic;namespacePCL{publicinterfaceIAppDomain{ILis

c# - 关于字符串实习和替代方案

我有一个大文件,它本质上包含如下数据:Netherlands,Noord-holland,Amsterdam,FooStreet,1,...,...Netherlands,Noord-holland,Amsterdam,FooStreet,2,...,...Netherlands,Noord-holland,Amsterdam,FooStreet,3,...,...Netherlands,Noord-holland,Amsterdam,FooStreet,4,...,...Netherlands,Noord-holland,Amsterdam,FooStreet,5,...,...Ne